﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Captcha
{
    public class SqlDbContext : DbContext
    {
        //TPH  默认是一张表
        //TPC 只显示子类表，不显示父类表
        public DbSet<Student> Students { get; set; }
        public DbSet<Teacher> Teachers { get; set; }
        public DbSet<Person> People { get; set; }

        //1.没有调用构造函数，即没有指定数据库，在运行时，会自动创建数据库
        //2.有构造函数，创建指定的数据库名字，先看App.config是否指定连接哪个数据库，
        //如果config没有指定，就看SqlDbContext中的base指定的是数据库名还是连接名
        public SqlDbContext() : base("18bang")
        {
            //从控制台输出
            Database.Log = Console.WriteLine;
            
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //双向关联一对一  两者会使用相同的Id
            //modelBuilder.Entity<Student>()
            //    .HasRequired(s => s.SleepIn)
            //    //.WithRequiredDependent() //Student为从表，默认
            //    .WithRequiredPrincipal() //Student为主表，外键放在Bed上
            //    ;

            //TPT 分成多张表
            //modelBuilder.Entity<Teacher>().ToTable("Teachers");
            //modelBuilder.Entity<Student>().ToTable("Students");

            //TPC 映射继承的属性 map
            //modelBuilder.Entity<Student>()
            //    .Map(m =>
            //    {
            //        m.MapInheritedProperties();
            //        m.ToTable("Students");
            //    });

            //modelBuilder.Entity<Teacher>()
            //    .Map(m =>
            //    {
            //        m.MapInheritedProperties();
            //        m.ToTable("Teachers");
            //    });


            modelBuilder.Entity<Student>()
                //.ToTable("MyStudent")
                .Property(s => s.Name)
                //.HasColumnName("StudentName")
                .HasMaxLength(256)
                ;
            //modelBuilder.Entity<Student>()
            //    .Property(s => s.Score)
            //    .IsRequired()
            //    ;
            //modelBuilder.Entity<Student>()
            //    .HasIndex(s => s.Score)
            //    .IsUnique()
            //    ;
            
            base.OnModelCreating(modelBuilder);
        }

    }
}
